System.Drawing
var input = File.ReadAllLines(Path.Combine(Path.GetDirectoryName(Util.CurrentQueryPath), "..", "day23.txt"));
var instructions = input.Select(i => i.Split()).Select(i => new { op = i[0], reg = i[1], parm = i.Length > 2 ? i[2] : "" }).ToArray();
var registers = Enumerable.Range(0,8).ToDictionary(e => ((char)('a'+e)).ToString(), e=> 0L);
long get(Dictionary regs, string x) => long.TryParse(x, out long y) ? y : regs[x];
var mulCtr = 0;
bool doInst(Dictionary regs, ref long ins)
{
if (ins < -1 || ins >= instructions.Length) return false;
var reg = instructions[ins].reg;
switch (instructions[ins].op)
{
case "set": regs[reg] = get(regs, instructions[ins].parm); break;
case "sub": regs[reg] -= get(regs, instructions[ins].parm); break;
case "mul": regs[reg] *= get(regs, instructions[ins].parm); mulCtr++; break;
case "jnz": if (get(regs, reg) != 0) { ins += long.Parse(instructions[ins].parm); ins--; } break;
}
ins++;
return true;
}
var pos = 0L;
while (doInst(registers, ref pos))
{ }
mulCtr.Dump();
// part 2
var b = 67;
var c = b;
var a = 1;
int h = 0;
if (a != 0)
{
b = (b * 100) + 100000;
c = b + 17000;
}
do
{
for (var d = 2; d < b; d++)
{
if (b % d == 0)
{
h++;
break;
}
}
b += 17;
} while (b - c != 17);
h.Dump();